package gweb

// type ViewAction string

// const (
// 	ViewCreate ViewAction = "Create"
// 	ViewUpdate ViewAction = "Update"
// 	ViewDelete ViewAction = "Delete"
// 	ViewList   ViewAction = "List"
// 	ViewDetail ViewAction = "detail"
// )

// 路由视图接口
type IRouteView interface {
	AddRoutes(router *RouterGroup)
}

// type IAuthView interface {
// 	HasRole(claim *Claim, roles ...string) bool
// 	HasPermission(claim *Claim, permissions ...string) bool
// 	HasAnyRole(claim *Claim, roles ...string) bool
// 	HasAnyPermission(claim *Claim, permissions ...string) bool
// }

// type IRelRouteView interface {
// 	RelativeRoute() string
// }

// type IApiView interface {
// 	RegisterRoutes(router *RouterGroup)
// }

// type IDbQuery interface {
// 	Query(action ViewAction, c *Context) *DB
// }

// type ICreateView interface {
// 	Create(c *Context)
// }

// type IUpdateView interface {
// 	Update(c *Context)
// 	setUpdateQsView(view IDbQuery)
// }

// type IFirstView interface {
// 	First(c *Context)
// 	setFirstQsView(view IDbQuery)
// }

// type IListView interface {
// 	List(c *Context)
// 	setListQsView(view IDbQuery)
// }

// type IDetailView interface {
// 	Detail(c *Context)
// 	setDetailQsView(view IDbQuery)
// }

// type IDeleteView interface {
// 	Delete(c *Context)
// 	DeletePermanently(c *Context)
// 	setDelQsView(view IDbQuery)
// }

// type ILoginView interface {
// 	Login(c *Context)
// }

// type IRegisterView interface {
// 	Register(c *Context)
// }

// type CreateView[T any] struct{}

// type UpdateView[T any] struct {}

// type DetailView[T any] struct {}

// func (view *DetailView[T]) Detail(c *Context) {
// 	var db *DB
// 	var m T
// 	if view.QSView != nil {
// 		db = view.QSView.Query(ViewDetail, c)
// 	} else {
// 		db = c.App.DB.Model(&m)
// 	}
// 	db.Panic().First(&m)
// 	c.SuccessWithData(m)
// }

// type DeleteView[T any] struct {}

// // 逻辑删除
// func (view *DeleteView[T]) Delete(c *Context) {

// }

// // 是否允许永久删除，默认允许
// func (view *DeleteView[T]) AllowDeletePermanently() bool {
// 	return true
// }

// // 永久删除
// func (view *DeleteView[T]) DeletePermanently(c *Context) {
// 	if view.AllowDeletePermanently() {
// 		c.App.DB.Transaction(func(tx *DB) error {
// 			var m T
// 			var db *DB
// 			if view.QSView != nil {
// 				db = view.QSView.Query(ViewList, c)
// 			} else {
// 				panic("can not delete without query!")
// 			}
// 			db.Panic().Delete(&m)
// 			return nil
// 		})
// 	} else {
// 		c.JSON(http.StatusForbidden, gin.H{
// 			"succeeded": false,
// 			"message":   "Can not delete permanently!",
// 		})
// 	}
// }

// type QueryModel any

// type ListView[T any] struct {}

// func (view *ListView[T]) List(c *Context) {
// 	var db *DB
// 	if view.QSView != nil {
// 		db = view.QSView.Query(ViewList, c)
// 	} else {
// 		var m T
// 		db = c.App.DB.Model(&m)
// 	}
// 	// var q Q
// 	// c.ShouldBindQuery(&q)
// 	var pageIndex int
// 	var pageSize int
// 	for _, param := range c.Params {
// 		if param.Key == "pi" {
// 			pageIndex = int(gx.MustParseInt(param.Value))
// 			pageSize = int(gx.MustParseInt(param.Value))
// 		}
// 	}
// 	var records []T
// 	data, _ := db.FindOrPaginate(&records, pageIndex, pageSize)
// 	c.SuccessWithData(data)
// }
